/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import java.util.*;
import entities.*;

/**
 *
 * eCOM - Adopte un Presta - Mars-Avril 2013
 * @author Kheira, Jef, William, Tuan-Long
 */
public interface Idao {    
    
    // ------------------------------------------
    // Méthodes pour Account, Commande et Product
    // ------------------------------------------

    // liste des comptes
    public List<Account> getAllAccounts();
    
    // liste des produits
    public List<Product> getAllProducts();
    
    // Liste des commandes
    public List<Commande> getAllCommandes();
    
    // liste des comptes par AccessLevel 
    public List<Account> getAccountsByAccessLevel(Integer acessLevel);
    
     // trouver un compte par son id
    public Account getAccountById(int idAccount);
    
    // trouver un compte par son login
    public Account getAccountsByLogin(String login);
    
    // trouver un compte par son login et password -> connexion
    public Account getAccountByLoginAndPass(String login, String password);
    
    // Créditer un compte avec un nouveau solde
    public void updateAccountWithSolde(Account a, double added_solde);
    
    // Met à jour un Product avec un numéro de comande à jour
    public void updateProductWithIdCommande(Product p, int idc);
    
    // liste des commandes d'un compte
    public List<Commande> getAllCommandesOfAccount(int i);
    
    // Récupère le Product lié à un idCommande
    public Product getProductByIdCommande(int i);
    
    // Récupère le Product lié à son id
    public Product getProductById(int i);
    
    // Récupère le Product lié à son nom et son prenom
    public Product getProductByNometPrenom(String nom, String prenom);
    
    // Mettre à jour l'état d'un prestataire
    public void updateProductEtat(int idP, String new_etat);
    
    // récupérer le solde d'un compte 
    public Double getSoldeOfAccount(Account a);
    
    // récupérer l'IBAN d'un compte 
    public String getIbanOfAccount(Account a);
    
    // récupérer le CV d'un produit 
    public Cv getCvOfProduct(Product prestataire);
    
    // récupérer le product store d'un prestataire
    public ProductStore getProductStoreOfProduct(Product prestataire);
    
    // récupérer une commande par son id 
    public Commande getCommandeById(Integer id);
    
    // ajouter un compte utilisateur
    public Account addAccount(int idAccount, String nom, String prenom,String adresse, double solde, String login, String password, int accessLevel, String iban, int idCart);
   
   
    // ajouter un produit 
    public Product addProduct(int idProduct, String nom, String prenom, double prix, String description, int idCV, int reference, String etat, int categorie, int idCommande); 
  
    // ajouter une commande 
    public Commande addCommande(Integer idCommande, Integer accountidAccount);
    
    // supprimer un compte 
    public void deleteAccount(Account a);
    
    // supprimer un produit 
    public void deleteProduct(Product prestataire);
    
    // Modifier un compte
    public void updateAccount(int idAccount, String nom, String prenom, String adresse, double solde, String login, String password, String iban);
    
    // modifier un produit
     public void updatePresta(int idPresta, String nom, String prenom, String description, double prix, int intReference, String etat, int intCategorie);
        
    // liste des products store 
    
    // liste des produits d'un product store**/
    
    // ------------------------------
    // Méthodes pour Commentaire
    // ------------------------------
    
    // Ajouter un commentaire
    public Commentaire addCommentaire(Integer idCommentaire, String commentaire, String note, Integer productidProduct);
    
    // Supprimer un commentaire
    public void deleteCommentaire(Commentaire comm);
    
    // Récupérer un commentaire par son id
    public Commentaire getCommentaireById(Integer id);
    
    // Liste des commentaires d'un prestataire
    public List<Commentaire> getAllCommentairesOfProduct(Product p);
    
    // ------------------------------
    // Méthodes pour CV
    // ------------------------------
    
    // Ajouter un commentaire
    public Cv addCv(Integer idCV, Date dateDeNaissance, String situationMatrimoniale,
            String formation, String competences, String experienceProfessionnelle,
            String loisirs);
    
    // Supprimer un commentaire
    public void deleteCv(Cv c_v);
    
    // Récupérer un CV par son id
    public Cv getCvById(Integer id);
    
        
    // -----------------------------------------
    // Méthodes à utiliser avec ProductStore 
    // -----------------------------------------
     
     // Liste des ProductStore
     public List<ProductStore> getAllProductStore();
     
     // Ajouter un ProductStore
     public ProductStore addProductStore (Integer reference, String nom, String description, String IBAN);
      
     // Modifier un ProductStore
     public void updateProductStore(int intReference, String nom, String description, String iban);
    
     // Supprimer un ProductStore 
     public void deleteProductStore(ProductStore ps);      
     
     // Trouver un ProductStore par sa référence
     public ProductStore getProductStoreByReference(Integer reference);
     
     // Trouver un ProductStore par son nom
     public ProductStore getProductStoreByNom(String nom);
     
     // Trouver un ProductStore par sa description
     public ProductStore getProductStoreByDescription(String description);
     
     // Trouver un ProductStore par son IBAN
     public ProductStore getProductStoreByIBAN(String IBAN);
     
     
     // ------------------------------------------
    // Méthodes à utiliser pour Cart
    // ------------------------------------------
    
    // récupérer la liste des Carts
    public List<Cart> getAllCart();
    
    // ajouter un Cart
    public Cart addCart(Integer idCart, double prixTotal);
    
     // Supprimer un Cart
     public void deleteCart(Cart c);
     
    // récupérer un Cart par son id
    public Cart getCartByIdCart(Integer idCart);
    
    // récupérer un Cart par son prix total
    public Cart getCartByPrixTotal(double prixTotal);
    
    // ------------------------------------------
    // Méthodes à utiliser pour Catégorie
    // ------------------------------------------
    
    // liste des catégories
    public List<Categorie> getAllCategories();
    
    // liste des développeurs (trier par catégorie : développeur)
    public List<Product> getAllDevelopers();
    
    // liste des chefs de projet parmis les prestataires
    public List<Product> getAllProjectManagers();
    
    // liste des responsables produits parmis les prestataires
    public List<Product> getAllProductManagers();
    
    // liste des architectes parmis les prestataires
    public List<Product> getAllArchitects();
    
    // liste des coachs parmis les prestataires
    public List<Product> getAllCoachs();
    
    // liste des consultants parmis les prestataires
    public List<Product> getAllConsultants();
    
    // liste de toutes les photos
    public List<Photo> getAllPhotos();
    
    // liste des photos d'un prestataire
    public List<Photo> getAllPhotosOfPresta(Product presta);
    
    // Ne retourne que la première photo d'un presta.
    public Photo getFirstPhotoOfPresta(Product presta);
}
